#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Size 5;//顺序表内元素个数
typedef struct Table{
	int *head;
	int length;
	int size;
}Table;
//初始化顺序表。。
Table initTable(){
	Table t;//结构体变量t
	t.head = malloc(5*sizeof (int));
	//
	if(!t.head){
		printf("初始化失败！\n");
		exit(0);//正常退出。
	}
	t.length =0;
	t.size=Size;
	return t;
}//////
//打印显示顺序表函数displayTable
void displayTable(Table t){
	for (int i = 0; i <t.length ; ++i) {
		printf("%d",t.head[i]);
	}
	printf("\n");
}
//删除元素方法delTable
Table delTable(Table t,int num){
	//t代表函数调用时传进来的顺序表，num代表要删除的那个数的位置(第几个)
	if(num>t.length||num<1){
		printf("被删除元素的位置有问题\n");
		return t;
	}
	//当删除元素位置没有问题的时候执行下列代码
	for(int i=num;i <t.length;i++){
		t.head[i-1]=t.head[i];
	}
	t.length--;
	return t;
}
//在指定位置插入元素
Table addTable(Table t,int mum ,int elem){
	if(mum>t.length||mum<1){
		printf("被插入元素的位置有问题\n");
		return t;
	}
	if(t.length>=t.size){
		//扩容
		realloc(t.head,(t.size+1)*sizeof(int));
		if(!t.head){
			printf("扩容失败\n");
		}
		t.size++;//空间容量加一
	}
	//当插入元素位置没有问题的时候执行下列代码
	for(int i=t.length;i>=mum-1;i--){
		t.head[i+1]=t.head[i];
	}
	//将要插入的元素
	t.head[mum-1]=elem;
	t.length++;
	return t;
};
//查找
int selectTable(Table t,int num){
	for(int i=0;i<t.length;i++){
		if(t.head[i]==num){
			return i;
		}
	}
}

//修改
Table  xiugaiTable(Table t,int sum,int num){
	for(int i=0;i<t.length;i++){
		if(sum==t.head[i]){
			t.head[i] = num;
		}
	}
	return t;
}
int main(){
	Table t1 = initTable();
	for (int i=0; i <5; ++i) {
		t1.head[i]=i;
		t1.length++;
	}
	printf("打印原顺序表：\n");
	//打印原顺序表
	displayTable(t1);
	//删除元素
	printf("要删除的元素");
	t1=delTable(t1,3);
	displayTable(t1);
	//在第二个元素位置插入元素5
	printf("在第二个元素位置插入元素5\n");
	t1= addTable(t1,4,8);
	displayTable(t1);
	
	//查找元素3的位置
	printf("查找元素3的位置:\n");
	int add = selectTable(t1,3);
	printf("%d\n",add);
	
	//修改元素3的位置
	printf("修改元素3的位置\n");
	t1 = xiugaiTable(t1,3,7);
	displayTable(t1);
	return 0;
}